#include<bits/stdc++.h>
using namespace std;
inline int read() {
	char c=getchar();
	int x=0;
	for(;c>'9'||c<'0';c=getchar());
	for(;c>='0'&&c<='9';c=getchar())
		x=(x<<1)+(x<<3)+c-'0';
	return x;	
}
int n,q,x,t,type;
int m[200001];
struct node {
	int num,no;
}a[200001];
bool cmp(node a,node b){
	if(a.num<b.num)
		return 1;
	if(a.num==b.num)
		return a.no<b.no;
	return 0;
}
void so(int p){
	if(a[p].num<=a[p-1].num){
		while(p>1)
			if(a[p-1].num>a[p].num){
				swap(a[p].num,a[p-1].num);
				swap(a[p].no,a[p-1].no);
				p--;
			}
			else if(a[p-1].num==a[p].num&&a[p-1].no>a[p].no){
				swap(a[p].num,a[p-1].num);
				swap(a[p].no,a[p-1].no);
				p--;
			}
			else
				break;
	}
	if(a[p].num>=a[p+1].num){
		while(p<n)
			if(a[p+1].num<a[p].num){
				swap(a[p].num,a[p+1].num);
				swap(a[p].no,a[p+1].no);
				p++;
			}
			else if(a[p+1].num==a[p].num&&a[p+1].no<a[p].no){
				swap(a[p].num,a[p+1].num);
				swap(a[p].no,a[p+1].no);
				p++;
			}
			else
				break;
	}
	for(int i=1;i<=n;i++)
		m[a[i].no]=i;
}
int main() {
	freopen("sort.in","r",stdin);
	freopen("sort.out","w",stdout);
	n=read(),q=read();
	for(int i=1;i<=n;i++)
		a[i].num=read(),a[i].no=i;
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++)
		m[a[i].no]=i;
	while(q--){
		type=read();
		if(type==1){
			x=read(),t=read();
			a[m[x]].num=t;
			so(m[x]);
		}
		else{
			x=read();
			printf("%d\n",m[x]);
		}
	}
	return 0;
}
